package p700;

import java.util.Stack;

/**
 * @author pengjz <br>
 * @version 1.0 <br>
 * @description Leetcode_739 <br>
 * @date 2021/3/2 23:50 <br>
 */
public class Leetcode_739 {

    /**
     * 递减栈
     *
     * @param T
     * @return
     */
    public int[] dailyTemperatures(int[] T) {
        // 后入栈的元素总比栈顶元素小
        Stack<Integer> stack = new Stack<>();
        int[] res = new int[T.length];
        // 遍历温度表
        for (int i = 0; i < T.length; i++) {
            // 如果当前元素比栈顶元素小，则入栈
            // 大则出栈，并将二者之间的下标差值记录为出栈元素的结果值
            // 然后继续比较
            // 如果栈为空，直接入栈
            while (!stack.isEmpty() && T[i] > T[stack.peek()]) {
                int temp = stack.pop();
                res[temp] = i - temp;
            }
            stack.push(i);
        }
        return res;
    }
}